import json
import flask  # 实现web服务
import time  # time.sleep()
from concurrent.futures import ThreadPoolExecutor

# 使用线程池ThraedPoolExecutor
# 方便将磁盘文件、数据库、远程API的IO调用并发执行
# 线程池的线程数目一定，不会无限创建导致系统挂掉，保护系统

app = flask.Flask(__name__)  # 创建服务
pool = ThreadPoolExecutor()  # 创建一个全局的线程池
# 并发的结果会使得 总调用时间 只比 最长调用时间 略长


def read_file():
    time.sleep(0.1)
    return "file result"


def read_db():
    time.sleep(0.2)
    return "db result"


# def read_api():
#     time.sleep(0.3)
#     return "api result"


@app.route("/")  # 对应根目录
def index():  # 模拟读取操作
    result_file = pool.submit(read_file)  # 读取文件    # submit获取future对象
    result_db = pool.submit(read_db)  #
    # result_api = pool.submit(read_api)  #

    return json.dumps({  # 字典   #添加进程池后 返回的是三个字符串对象
        "return_file": result_file.result(),    # result得到future对象
        "return_db": result_db.result(),
        # "return_api": result_api.result(),
    })


if __name__ == "__main__":
    app.run()  # 启动服务
